package br.com.carrosvale.model.entity;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import br.com.carrosvale.model.entity.enuns.Cambio;
import br.com.carrosvale.model.entity.enuns.Combustivel;
import br.com.carrosvale.model.entity.enuns.Cor;

@Entity
public class Automovel {

	@Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
	private Long id;
	private String renavam;
	private String placa;
	
	@ManyToOne
	@JoinColumn
	private Modelo modelo;
	private Integer anoModelo;
	private Integer anoFabricacao;
	private Boolean blindado;
	private BigDecimal preco;
	private BigDecimal quilometragem;
	
	@Enumerated(EnumType.ORDINAL)
	private Cambio cambio;
	private Integer numeroPortas;
	
	@Enumerated(EnumType.ORDINAL)
	private Cor cor;
	
	@Enumerated(EnumType.ORDINAL)
	private Combustivel combustivel;
	
	@ManyToMany
	private List<Opcional> opcionais;
	
	@ManyToMany
	private List<InformacaoAdicional> informacoesAdicionais;
	
	@OneToMany(cascade=CascadeType.ALL)
	private List<Foto> fotos;
	
	@OneToMany(cascade=CascadeType.ALL)
	private List<Video> videos;
	
	public Automovel(){}
	
	public Automovel( Long id ){
		this.id=id;
	}
	
	public void addFoto( Foto foto ){
		getFotos().add(foto);
	}
	
	public void addVideo( Video video ){
		getVideos().add(video);
	}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getRenavam() {
		return renavam;
	}

	public void setRenavam(String renavam) {
		this.renavam = renavam;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public Modelo getModelo() {
		return modelo;
	}

	public void setModelo(Modelo modelo) {
		this.modelo = modelo;
	}

	public Integer getAnoModelo() {
		return anoModelo;
	}

	public void setAnoModelo(Integer anoModelo) {
		this.anoModelo = anoModelo;
	}

	public Integer getAnoFabricacao() {
		return anoFabricacao;
	}

	public void setAnoFabricacao(Integer anoFabricacao) {
		this.anoFabricacao = anoFabricacao;
	}

	public Boolean getBlindado() {
		return blindado;
	}

	public void setBlindado(Boolean blindado) {
		this.blindado = blindado;
	}

	public BigDecimal getPreco() {
		return preco;
	}

	public void setPreco(BigDecimal preco) {
		this.preco = preco;
	}

	public BigDecimal getQuilometragem() {
		return quilometragem;
	}

	public void setQuilometragem(BigDecimal quilometragem) {
		this.quilometragem = quilometragem;
	}

	public Cambio getCambio() {
		return cambio;
	}

	public void setCambio(Cambio cambio) {
		this.cambio = cambio;
	}

	public Integer getNumeroPortas() {
		return numeroPortas;
	}

	public void setNumeroPortas(Integer numeroPortas) {
		this.numeroPortas = numeroPortas;
	}

	public Cor getCor() {
		return cor;
	}

	public void setCor(Cor cor) {
		this.cor = cor;
	}

	public Combustivel getCombustivel() {
		return combustivel;
	}

	public void setCombustivel(Combustivel combustivel) {
		this.combustivel = combustivel;
	}

	public List<Opcional> getOpcionais() {
		return opcionais;
	}

	public void setOpcionais(List<Opcional> opcionais) {
		this.opcionais = opcionais;
	}

	public List<InformacaoAdicional> getInformacoesAdicionais() {
		return informacoesAdicionais;
	}

	public void setInformacoesAdicionais(List<InformacaoAdicional> informacoesAdicionais) {
		this.informacoesAdicionais = informacoesAdicionais;
	}

	public List<Foto> getFotos() {
		return fotos = (fotos==null) ? new ArrayList<Foto>() : fotos;
	}

	public void setFotos(List<Foto> fotos) {
		this.fotos = fotos;
	}

	public List<Video> getVideos() {
		return videos = (videos==null) ? new ArrayList<Video>() : videos;
	}

	public void setVideos(List<Video> videos) {
		this.videos = videos;
	}

}
